package com.dragon.modules.yuegou.model.system;

import com.dragon.modules.yuegou.entity.system.MenuEntity;
import com.dragon.modules.yuegou.enums.OwnerType;
import com.dragon.modules.yuegou.enums.YsqAppType;
import com.dragon.modules.yuegou.enums.system.MenuExpandStatus;
import com.dragon.modules.yuegou.enums.system.MenuMark;
import com.dragon.modules.yuegou.enums.system.MenuStatus;
import io.swagger.annotations.ApiModelProperty;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 菜单表模型类
 * 
 * @author pbuilder generated
 * @date 2019-03-16 10:02:14
 * @company sgy
 * @version 2.0
 * @see Length 长度限制
 * @see NotNull 对象非空
 * @see NotEmpty 字符串、集合、表、数组非空
 */
public class Menu extends MenuEntity {

	private List<Menu> menuList;
	
	private Boolean selected;

	@ApiModelProperty("前端树形结构需要path获取id")
	private String path;

	public List<Menu> getMenuList() {
		return menuList;
	}

	public void setMenuList(List<Menu> menuList) {
		this.menuList = menuList;
	}

	public Boolean getSelected() {
		return selected;
	}

	public String getPath() {
		return path;
	}

	public void setPath(String path) {
		this.path = path;
	}

	public void setSelected(Boolean selected) {
		this.selected = selected;
	}

	/**
	 * 构造一个空菜单表模型对象
	 */
	public Menu(){
		super();
	}
	
	/**
	 * 依据实体对象的信息构造一个菜单表模型对象
	 * 
	 * @param entity 实体对象
	 */
	public Menu(MenuEntity entity){
		super(entity);
	}

	/**
	 * 依据其它对象的信息构造一个菜单表模型对象
	 * 
	 * @param other 其它对象
	 */
	public Menu(Menu other){
		super(other);
	}


	@Override
	public String getId() {
    	return id;
    }

    /**
	 * 设置编号
	 * 
	 * @param id 编号
	 * @return 当前对象
	 */
    public Menu id(String id) {
    	this.id = id;
    	return this;
    }

	@Override
	public String getName() {
    	return name;
    }

    /**
	 * 设置菜单名称
	 * 
	 * @param name 菜单名称
	 * @return 当前对象
	 */
    public Menu name(String name) {
    	this.name = name;
    	return this;
    }

	@Override
	public String getParentId() {
    	return parentId;
    }

    /**
	 * 设置上级菜单编号
	 * 
	 * @param parentId 上级菜单编号
	 * @return 当前对象
	 */
    public Menu parentId(String parentId) {
    	this.parentId = parentId;
    	return this;
    }

	@Override
	public OwnerType getOwnerType() {
    	return ownerType;
    }

    /**
	 * 设置[全局枚举]所有者类型：0-平台-PLATFORM、1-集团-GROUP、2-商圈-BUSINESS_DISTRICT、3-商户-MERCHANT
	 * 
	 * @param ownerType [全局枚举]所有者类型：0-平台-PLATFORM、1-集团-GROUP、2-商圈-BUSINESS_DISTRICT、3-商户-MERCHANT
	 * @return 当前对象
	 */
    public Menu ownerType(OwnerType ownerType) {
    	this.ownerType = ownerType;
    	return this;
    }

	@Override
	public String getIconCls() {
    	return iconCls;
    }

    /**
	 * 设置节点图标CSS类名
	 * 
	 * @param iconCls 节点图标CSS类名
	 * @return 当前对象
	 */
    public Menu iconCls(String iconCls) {
    	this.iconCls = iconCls;
    	return this;
    }

	@Override
	public Integer getSortNo() {
    	return sortNo;
    }

    /**
	 * 设置排序号
	 * 
	 * @param sortNo 排序号
	 * @return 当前对象
	 */
    public Menu sortNo(Integer sortNo) {
    	this.sortNo = sortNo;
    	return this;
    }

	@Override
	public String getRequestAddress() {
    	return requestAddress;
    }

    /**
	 * 设置请求地址
	 * 
	 * @param requestAddress 请求地址
	 * @return 当前对象
	 */
    public Menu requestAddress(String requestAddress) {
    	this.requestAddress = requestAddress;
    	return this;
    }

	@Override
	public String getPermission() {
    	return permission;
    }

    /**
	 * 设置权限标识(菜单名的英文)
	 * 
	 * @param permission 权限标识(菜单名的英文)
	 * @return 当前对象
	 */
    public Menu permission(String permission) {
    	this.permission = permission;
    	return this;
    }

	@Override
	public MenuExpandStatus getExpandStatus() {
    	return expandStatus;
    }

    /**
	 * 设置[枚举]展开状态：0-收缩-SHRINKAGE、1-展开-UNFOLD
	 * 
	 * @param expandStatus [枚举]展开状态：0-收缩-SHRINKAGE、1-展开-UNFOLD
	 * @return 当前对象
	 */
    public Menu expandStatus(MenuExpandStatus expandStatus) {
    	this.expandStatus = expandStatus;
    	return this;
    }

	@Override
	public String getRemark() {
    	return remark;
    }

    /**
	 * 设置备注
	 * 
	 * @param remark 备注
	 * @return 当前对象
	 */
    public Menu remark(String remark) {
    	this.remark = remark;
    	return this;
    }

	@Override
	public MenuStatus getStatus() {
    	return status;
    }

    /**
	 * 设置[枚举]状态：1-已启用-ENABLED、2-禁用-DISABLED
	 * 
	 * @param status [枚举]状态：1-已启用-ENABLED、2-禁用-DISABLED
	 * @return 当前对象
	 */
    public Menu status(MenuStatus status) {
    	this.status = status;
    	return this;
    }

	@Override
	public MenuMark getMark() {
    	return mark;
    }

    /**
	 * 设置[枚举]标志(APP和小程序只有按钮和营销两种类型)：0-顶部节点-TOP、1-父节点-PARENTNODE、2-叶节点-LEAFNODE、3-按钮-BUTTON、4-营销-MARKING
	 * 
	 * @param mark [枚举]标志(APP和小程序只有按钮和营销两种类型)：0-顶部节点-TOP、1-父节点-PARENTNODE、2-叶节点-LEAFNODE、3-按钮-BUTTON、4-营销-MARKING
	 * @return 当前对象
	 */
    public Menu mark(MenuMark mark) {
    	this.mark = mark;
    	return this;
    }

	@Override
	public String getTopMenuId() {
    	return topMenuId;
    }

    /**
	 * 设置顶部菜单id  用于一次查询所有顶部id下包含的菜单
	 * 
	 * @param topMenuId 顶部菜单id  用于一次查询所有顶部id下包含的菜单
	 * @return 当前对象
	 */
    public Menu topMenuId(String topMenuId) {
    	this.topMenuId = topMenuId;
    	return this;
    }

	@Override
	public LocalDateTime getCreatedTime() {
    	return createdTime;
    }

    /**
	 * 设置
	 * 
	 * @param createdTime 
	 * @return 当前对象
	 */
    public Menu createdTime(LocalDateTime createdTime) {
    	this.createdTime = createdTime;
    	return this;
    }

	@Override
	public String getCreatedBy() {
    	return createdBy;
    }

    /**
	 * 设置
	 * 
	 * @param createdBy 
	 * @return 当前对象
	 */
    public Menu createdBy(String createdBy) {
    	this.createdBy = createdBy;
    	return this;
    }

	@Override
	public LocalDateTime getModifiedTime() {
    	return modifiedTime;
    }

    /**
	 * 设置
	 * 
	 * @param modifiedTime 
	 * @return 当前对象
	 */
    public Menu modifiedTime(LocalDateTime modifiedTime) {
    	this.modifiedTime = modifiedTime;
    	return this;
    }

	@Override
	public String getModifiedBy() {
    	return modifiedBy;
    }

    /**
	 * 设置
	 * 
	 * @param modifiedBy 
	 * @return 当前对象
	 */
    public Menu modifiedBy(String modifiedBy) {
    	this.modifiedBy = modifiedBy;
    	return this;
    }

	@Override
	public Boolean getDel() {
    	return del;
    }

    /**
	 * 设置逻辑删除，1表示已删除,0表示未删除
	 * 
	 * @param del 逻辑删除，1表示已删除,0表示未删除
	 * @return 当前对象
	 */
    public Menu del(Boolean del) {
    	this.del = del;
    	return this;
    }

	@Override
	public String getDelBy() {
    	return delBy;
    }

    /**
	 * 设置
	 * 
	 * @param delBy 
	 * @return 当前对象
	 */
    public Menu delBy(String delBy) {
    	this.delBy = delBy;
    	return this;
    }

	@Override
	public LocalDateTime getDelTime() {
    	return delTime;
    }

    /**
	 * 设置
	 * 
	 * @param delTime 
	 * @return 当前对象
	 */
    public Menu delTime(LocalDateTime delTime) {
    	this.delTime = delTime;
    	return this;
    }

	@Override
	public YsqAppType getApplication() {
    	return application;
    }

    /**
	 * 设置[全局枚举]应用：0-大运营后台-YSQ_PLATFORM、1-集团版后台-YSQ_GROUP、2-悦商圈APP安卓版-YSQ_APP_ANDROID、3-悦商圈APPIOS版-YSQ_APP_IOS、4-悦商惠小程序-YSQ_MERCHANT_XCX、5-悦购小程序-YSQ_XCX、6-悦荷包小程序-YSQ_WALLET_XCX、7-悦商管小程序-YSQ_GROUP_XCX、7-悦商圈员工版小程序-YSQ_GROUP_EMPLOYEE_XCX
	 * 
	 * @param application [全局枚举]应用：0-大运营后台-YSQ_PLATFORM、1-集团版后台-YSQ_GROUP、2-悦商圈APP安卓版-YSQ_APP_ANDROID、3-悦商圈APPIOS版-YSQ_APP_IOS、4-悦商惠小程序-YSQ_MERCHANT_XCX、5-悦购小程序-YSQ_XCX、6-悦荷包小程序-YSQ_WALLET_XCX、7-悦商管小程序-YSQ_GROUP_XCX、7-悦商圈员工版小程序-YSQ_GROUP_EMPLOYEE_XCX
	 * @return 当前对象
	 */
    public Menu application(YsqAppType application) {
    	this.application = application;
    	return this;
    }

    @Override
	public String getRoles() {
    	return roles;
    }

    /**
	 * 设置绑定在菜单上的系统内置角色
	 * 
	 * @param roles 绑定在菜单上的系统内置角色
	 * @return 当前对象
	 */
    public Menu roles(String roles) {
    	this.roles = roles;
    	return this;
    }
}
